/*
 * @lc app=leetcode.cn id=647 lang=java
 *
 * [647] 回文子串
 *
 * https://leetcode-cn.com/problems/palindromic-substrings/description/
 *
 * algorithms
 * Medium (59.66%)
 * Likes:    164
 * Dislikes: 0
 * Total Accepted:    13.6K
 * Total Submissions: 22.9K
 * Testcase Example:  '"abc"'
 *
 * 给定一个字符串，你的任务是计算这个字符串中有多少个回文子串。
 *
 * 具有不同开始位置或结束位置的子串，即使是由相同的字符组成，也会被计为是不同的子串。
 *
 * 示例 1:
 *
 *
 * 输入: "abc"
 * 输出: 3
 * 解释: 三个回文子串: "a", "b", "c".
 *
 *
 * 示例 2:
 *
 *
 * 输入: "aaa"
 * 输出: 6
 * 说明: 6个回文子串: "a", "a", "a", "aa", "aa", "aaa".
 *
 *
 * 注意:
 *
 *
 * 输入的字符串长度不会超过1000。
 *
 *
 */

// @lc code=start
class Solution {
    public int countSubstrings(String s) {
        char[] c = s.toCharArray();

        int len = s.length();
        int count = len;
        boolean dp[][] = new boolean[len][len];
        for(int i=0; i < len; i++)
            dp[i][i] = true;
        for(int index=0; index < len - 1; index++) {
            if(c[index] == c[index+1]) {
                dp[index][index+1] = true;
                count++;
            }

        }
        for(int col = 0; col < len; col++){
            for(int row = 0; row < len; row++) {
                if(col - row > 1)
                    if(dp[row+1][col-1] && c[row]==c[col]) {
                        dp[row][col] = true;
                        count++;
                    }

            }
        }

        return count;
    }

}
// @lc code=end

